package com.jsejtman.gastos.service.impl;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.jsejtman.gastos.persistence.dao.FrecuenciaDao;
import com.jsejtman.gastos.persistence.dao.DaoException;
import com.jsejtman.gastos.persistence.entity.Frecuencia;
import com.jsejtman.gastos.service.definition.BaseService;
import com.jsejtman.gastos.service.exception.ServiceException;

/**
 * Servicio que permite realizar operaciones con una entidad de datos Frecuencia.
 * 
 * @author jsejtman
 */
@Service
@Transactional
public class FrecuenciaService extends BaseService implements IFrecuenciaService {

	/**
	 * Logger de la aplicación.
	 */
	private static final Logger LOGGER = Logger.getLogger(FrecuenciaService.class);

	/**
	 * Obtiene una entidad de datos Frecuencia a través de su identificador.
	 * 
	 * @param id Identificador de la entidad.
	 * @return Entidad de datos Frecuencia hallada.
	 * @throws ServiceException En caso de problemas.
	 */
	public final Frecuencia getFrecuenciaById(final Long id) throws ServiceException {

		if (id == null) {
			throw new ServiceException("El identificador de categoría no fue especificado.");
		}
		try {
			final FrecuenciaDao dao = this.getDaoFactory().newDao(FrecuenciaDao.class);

			return (dao.get(Frecuencia.class, id));

		} catch (final DaoException e) {
			final String mensajeError =
			        "Error al obtener " + Frecuencia.class.getName() + " con ID = " + id;

			FrecuenciaService.LOGGER.error(mensajeError, e);

			throw new ServiceException(mensajeError, e);
		}
	}

	/**

	/**
	 * Graba o actualiza el frecuencia pasado.
	 * 
	 * @param frecuencia el frecuencia a grabar.
	 * @throws ServiceException en caso de problemas
	 */
	public final void saveFrecuencia(final Frecuencia frecuencia) throws ServiceException {

		if (frecuencia == null) {
			throw new ServiceException("La frecuencia no fue especificada.");
		}
		try {
			final FrecuenciaDao entityDao = this.getDaoFactory().newDao(FrecuenciaDao.class);

			entityDao.saveOrUpdate(frecuencia);

		} catch (final DaoException e) {
			final String mensajeError =
			        "Error al grabar " + Frecuencia.class.getName() + " frecuencia = " + frecuencia;

			FrecuenciaService.LOGGER.error(mensajeError, e);

			throw new ServiceException(mensajeError, e);
		}

	}

	/**
	 * Borra un frecuencia.
	 * 
	 * @param frecuencia la frecuencia a borrar
	 * @throws ServiceException si ocurre un error.
	 */
	public final void deleteFrecuencia(final Frecuencia frecuencia) throws ServiceException {

		if (frecuencia == null) {
			throw new ServiceException("La ategoria no fue especificada.");
		}
		try {
			final FrecuenciaDao entityDao = this.getDaoFactory().newDao(FrecuenciaDao.class);

			entityDao.delete(frecuencia);

		} catch (final DaoException e) {
			final String mensajeError =
			        "Error al borrar " + Frecuencia.class.getName() + " frecuencia = " + frecuencia;

			FrecuenciaService.LOGGER.error(mensajeError, e);

			throw new ServiceException(mensajeError, e);
		}
	}

}
